﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;
using BusinessLogicLayer.Global;
using BusinessLogicLayer.Logistica;
using BusinessEntityLayer.Resultado;

namespace Reportes.Logistica
{
    public partial class LogisticaVerificador : Form
    {
        public LogisticaVerificador()
        {
            InitializeComponent();
        }

        private static LogisticaVerificador m_FormDefInstance;
        public static LogisticaVerificador DefInstance
        {
            get
            {
                if (m_FormDefInstance == null || m_FormDefInstance.IsDisposed)
                    m_FormDefInstance = new LogisticaVerificador();
                return m_FormDefInstance;
            }
            set
            {
                m_FormDefInstance = value;
            }
        }

        #region "Declaraciones"

        String VL_AINGCODIGO="";
        String VL_EMPRCODIGO="";
        String VL_DESTINO="";

        String VL_MONCODIGO = "";

        String VL_NROFACTURA = "";

        String VL_DAINGCODIGO = "";
        Decimal VL_DINGIMPORTEGRUPAL = 0;
        Decimal VL_DINGPRECIOGRUPAL = 0;
        Decimal VL_DINGPRECIOUNI = 0;


        //TESORERIA

        String VL_IDREGISTRO;
        String VL_TESORERIA_EMPRESA;
        Double VL_TESORERIA_VALORVENTA;
        DateTime VL_TESORERIA_FECHAFACTURA;


        #endregion

        #region "Procedimientos"

        private void CargarLista()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvVerificar VL_SrvVerificar = new SrvVerificar();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvVerificar.Fnc_Listar_IngresosFactura(txtNroOrdenCompra.Text.ToString(), cboPeriodo.Text.ToString());

                if (VL_BeanResultado.blnExiste == true)
                {
                    dgvLista.DataSource = VL_BeanResultado.dtResultado;
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CargarListaOC()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvVerificar VL_SrvVerificar = new SrvVerificar();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvVerificar.Fnc_Listar_IngresosFactura_Oconumero(txtNroOrdenCompra.Text.ToString(), cboPeriodo.Text.ToString());

                if (VL_BeanResultado.blnExiste == true)
                {
                    lstFiltroOrdenCompra.DataSource = VL_BeanResultado.dtResultado;

                    lstFiltroOrdenCompra.DisplayMember = "OCONUMERO";
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CargarSubLista()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvVerificar VL_SrvVerificar = new SrvVerificar();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvVerificar.Fnc_Listar_IngresosFacturaDetalle();

                if (VL_BeanResultado.blnExiste == true)
                {
                    dgvSubLista.DataSource = VL_BeanResultado.dtResultado;


                    CalculoTotal();

                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CalculoTotal()
        {
            decimal sum = 0;
            for (int i = 0; i < dgvSubLista.Rows.Count; ++i)
            {
                sum += decimal.Parse(dgvSubLista.Rows[i].Cells["DIngImporteGrupal"].Value.ToString());
            }

            String VL_SIGNO = "US$ ";

            if (VL_MONCODIGO =="01")
            {
                VL_SIGNO = "S/. ";   
            }

            txtTotal.Text =   VL_SIGNO +  sum.ToString();
        }

        private void Actualizar_Ingreso_Detalle(String VLA_AINCODIGO, String VLA_DINGCODIGO, String VLA_EMPRCODIGO, Decimal VLA_DINGIMPORTEGRUPAL, Decimal VLA_DINGPRECIOGRUPAL, Decimal VLA_DINGPRECIOUNI, String VLA_IDREGISTRO, String VLA_TESORERIAEMPRCODIGO)
        {
            SrvVerificar VL_SrvVerificar = new SrvVerificar();
            BeanResultado.ResultadoTransaccion VL_BeanResultado = new BeanResultado.ResultadoTransaccion();

            VL_BeanResultado = VL_SrvVerificar.Fnc_Actualizar_Ingreso_Detalle(VLA_AINCODIGO, VLA_DINGCODIGO, VLA_EMPRCODIGO, VLA_DINGIMPORTEGRUPAL, VLA_DINGPRECIOGRUPAL, VLA_DINGPRECIOUNI, VLA_IDREGISTRO, VLA_TESORERIAEMPRCODIGO);

            if (VL_BeanResultado.blnResultado == false)
            {
                MessageBox.Show(VL_BeanResultado.strMensaje, "Error");
                return;
            }
            else
            {
                return;
            }

        }

        private void Actualizar_Ingreso_Temporal(String VI_AINGCODIGO, String VI_EMPRCODIGO, String VI_DESTINO)
        {
            SrvVerificar VL_SrvVerificar = new SrvVerificar();
            BeanResultado.ResultadoTransaccion VL_BeanResultado = new BeanResultado.ResultadoTransaccion();

            VL_BeanResultado = VL_SrvVerificar.Fnc_Insertar_Ingresos_Temporales(VI_AINGCODIGO, VI_EMPRCODIGO, VI_DESTINO);

            if (VL_BeanResultado.blnResultado == false)
            {
                MessageBox.Show(VL_BeanResultado.strMensaje, "Error");
                return;
            }
            else
            {
                return;
            }

        }

        private void Eliminar_Ingreso_Temporal()
        {
            SrvVerificar VL_SrvVerificar = new SrvVerificar();
            BeanResultado.ResultadoTransaccion VL_BeanResultado = new BeanResultado.ResultadoTransaccion();

            VL_BeanResultado = VL_SrvVerificar.Fnc_Eliminar_Ingresos_Temporales();

            if (VL_BeanResultado.blnResultado == false)
            {
                MessageBox.Show(VL_BeanResultado.strMensaje, "Error");
                return;
            }
            else
            {
                return;
            }

        }

        private void CargarTipoCambio()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvVerificar VL_SrvVerificar = new SrvVerificar();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvVerificar.Fnc_Listar_TipoCambio(VL_TESORERIA_FECHAFACTURA);

                if (VL_BeanResultado.blnExiste == true)
                {
                    txtTCambio.Text = VL_BeanResultado.dtResultado.Rows[0][0].ToString();
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        #endregion

        private void LogisticaVerificador_Load(object sender, EventArgs e)
        {
            cboPeriodo.Text = "2014";
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {

            if (txtNroOrdenCompra.Text.Length < 9)
            {
                lstFiltroOrdenCompra.Visible = true;
                CargarListaOC();
            }
            else
            {
                CargarLista();

                if (dgvLista.Rows.Count > 0)
                {
                    VL_AINGCODIGO = dgvLista.Rows[0].Cells["aIngCodigo"].Value.ToString() + "";
                    VL_EMPRCODIGO = dgvLista.Rows[0].Cells["EmprCodigo"].Value.ToString() + "";
                    VL_DESTINO = dgvLista.Rows[0].Cells["Destino"].Value.ToString() + "";
                    VL_MONCODIGO = dgvLista.Rows[0].Cells["MONCODIGO"].Value.ToString() + "";
                }
                else
                {
                    dgvSubLista.DataSource = null;
                }
            }

          
        }

        private void dgvLista_Click(object sender, EventArgs e)
        {
            if (dgvLista.Rows.Count() > 0)
            {
                VL_AINGCODIGO = dgvLista.CurrentRow.Cells["aIngCodigo"].Value.ToString() + "";
                VL_EMPRCODIGO = dgvLista.CurrentRow.Cells["EmprCodigo"].Value.ToString() + "";
                VL_DESTINO = dgvLista.CurrentRow.Cells["Destino"].Value.ToString() + "";

                // dgvLista.CurrentRow.Cells["MonCodigo"].Value.ToString() + "";
                //CargarSubLista();
            }
        }

        private void dgvSubLista_CellValueChanged(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
        {

        }

        private void dgvSubLista_CellEndEdit(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
        {
            if (e.Value != null)
            {
                
          

            if (chkIncluyeIGV.Checked == true)
            {
                dgvSubLista.CurrentRow.Cells["DIngImporteGrupal"].Value = Convert.ToString( Math.Round((Convert.ToDouble(e.Value) / 1.18),5));
                dgvSubLista.CurrentRow.Cells["DIngPrecioGrupal"].Value = Convert.ToString( Math.Round((Convert.ToDouble(e.Value) / 1.18) / Convert.ToDouble(dgvSubLista.CurrentRow.Cells["CantidadGrupoContada"].Value),5));

                CalculoTotal();

            }
            else
            {
                dgvSubLista.CurrentRow.Cells["DIngImporteGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value)),5));
                dgvSubLista.CurrentRow.Cells["DIngPrecioGrupal"].Value = Convert.ToString( Math.Round( (Convert.ToDouble(e.Value)) / Convert.ToDouble(dgvSubLista.CurrentRow.Cells["CantidadGrupoContada"].Value),5));

                CalculoTotal();
            }

            }

        }

        private void btnConfirmar_Click(object sender, EventArgs e)
        {

            if (VL_IDREGISTRO == "")
            {
                MessageBox.Show("Asigne una factura");

                return;
            }

            for (int i = 0; i < dgvSubLista.Rows.Count; ++i)
            {
                VL_AINGCODIGO = dgvSubLista.Rows[i].Cells["AingCodigo"].Value.ToString();
                VL_DAINGCODIGO = dgvSubLista.Rows[i].Cells["DIngCodigo"].Value.ToString();
                VL_DINGIMPORTEGRUPAL = decimal.Parse(dgvSubLista.Rows[i].Cells["DINGIMPORTEGRUPAL"].Value.ToString());
                VL_DINGPRECIOGRUPAL = decimal.Parse(dgvSubLista.Rows[i].Cells["DINGPRECIOGRUPAL"].Value.ToString());
                //VL_DINGPRECIOUNI = decimal.Parse(dgvSubLista.Rows[i].Cells["DINGPRECIOUNI"].Value.ToString());

                Actualizar_Ingreso_Detalle(VL_AINGCODIGO, VL_DAINGCODIGO, VL_EMPRCODIGO, VL_DINGIMPORTEGRUPAL, VL_DINGPRECIOGRUPAL, VL_DINGPRECIOUNI, VL_IDREGISTRO,VL_TESORERIA_EMPRESA);

            }

            txtNroDocumento.Text = "";
            txtValorVenta.Text = "";
            CargarLista();
            dgvSubLista.DataSource = null;
            Eliminar_Ingreso_Temporal();
        }

        private void btnVerFacturas_Click(object sender, EventArgs e)
        {
            VL_IDREGISTRO = "";
            VL_TESORERIA_EMPRESA = "";


            Eliminar_Ingreso_Temporal();

            for (int i = 0; i < dgvLista.Rows.Count; i++)
            {
                if (Convert.ToBoolean(dgvLista.Rows[i].Cells["Check"].Value) == true)
                {
                    VL_AINGCODIGO = dgvLista.Rows[i].Cells["aIngCodigo"].Value.ToString() + "";
                    VL_EMPRCODIGO = dgvLista.Rows[i].Cells["EmprCodigo"].Value.ToString() + "";
                    VL_DESTINO = dgvLista.Rows[i].Cells["Destino"].Value.ToString() + "";

                    Actualizar_Ingreso_Temporal(VL_AINGCODIGO, VL_EMPRCODIGO, VL_DESTINO);
                }
            }



            using (var form = new LogisticaVerificadorVerFactura(VL_AINGCODIGO, VL_EMPRCODIGO, VL_DESTINO))
            {
                var result = form.ShowDialog();
                if (result == DialogResult.OK)
                {
                    //string val = form.ReturnValue1;            //values preserved after close
                    //string dateString = form.ReturnValue2;
                    //Do something here with these values

                    VL_IDREGISTRO = form.VL_IDREGISTRO;
                    VL_TESORERIA_EMPRESA = form.VL_TESORERIA_EMPRESA;
                    VL_TESORERIA_VALORVENTA = form.VL_TESORERIA_VALORVENTA;
                    VL_TESORERIA_FECHAFACTURA = Convert.ToDateTime( form.VL_TESORERIA_FECHAFACTURA);



                    CargarTipoCambio();
                    txtNroDocumento.Text = form.VL_NRODOCUMENTO;
                    txtValorVenta.Text = VL_TESORERIA_VALORVENTA.ToString();

                    //for example
                    //this.txtSomething.Text = val;
                }
            }

            if (VL_IDREGISTRO == "")
            {
                return;
            }

            CargarSubLista();


        }

        private void txtNroOrdenCompra_KeyPress(object sender, KeyPressEventArgs e)
        {
            

            if (e.KeyChar == (char)13)
            {

                if (txtNroOrdenCompra.Text.Length < 9)
                {
                    lstFiltroOrdenCompra.Visible = true;
                    CargarListaOC();
                }
                else
                {
                    CargarLista();

                    if (dgvLista.Rows.Count > 0)
                    {
                        VL_AINGCODIGO = dgvLista.Rows[0].Cells["aIngCodigo"].Value.ToString() + "";
                        VL_EMPRCODIGO = dgvLista.Rows[0].Cells["EmprCodigo"].Value.ToString() + "";
                        VL_DESTINO = dgvLista.Rows[0].Cells["Destino"].Value.ToString() + "";
                        VL_MONCODIGO = dgvLista.Rows[0].Cells["MONCODIGO"].Value.ToString() + "";
                    }
                    else
                    {
                        dgvSubLista.DataSource = null;
                    }
                }
               
            }
        }

        private void lstFiltroOrdenCompra_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
        {
           
            
        }

        private void lstFiltroOrdenCompra_DoubleClick(object sender, EventArgs e)
        {


            if (lstFiltroOrdenCompra.Items.Count>0)
	        {
                txtNroOrdenCompra.Text = lstFiltroOrdenCompra.SelectedItem.ToString();

                CargarLista();

                if (dgvLista.Rows.Count > 0)
                {
                    VL_AINGCODIGO = dgvLista.Rows[0].Cells["aIngCodigo"].Value.ToString() + "";
                    VL_EMPRCODIGO = dgvLista.Rows[0].Cells["EmprCodigo"].Value.ToString() + "";
                    VL_DESTINO = dgvLista.Rows[0].Cells["Destino"].Value.ToString() + "";
                    VL_MONCODIGO = dgvLista.Rows[0].Cells["MONCODIGO"].Value.ToString() + "";
                }
                else
                {
                    dgvSubLista.DataSource = null;
                }
	        }
            lstFiltroOrdenCompra.Visible = false;

        }

        private void lstFiltroOrdenCompra_KeyDown(object sender, KeyEventArgs e)
        {

        }

        private void lstFiltroOrdenCompra_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (lstFiltroOrdenCompra.Items.Count > 0)
            {
                txtNroOrdenCompra.Text = lstFiltroOrdenCompra.SelectedItem.ToString();

                CargarLista();

                if (dgvLista.Rows.Count > 0)
                {
                    VL_AINGCODIGO = dgvLista.Rows[0].Cells["aIngCodigo"].Value.ToString() + "";
                    VL_EMPRCODIGO = dgvLista.Rows[0].Cells["EmprCodigo"].Value.ToString() + "";
                    VL_DESTINO = dgvLista.Rows[0].Cells["Destino"].Value.ToString() + "";
                    VL_MONCODIGO = dgvLista.Rows[0].Cells["MONCODIGO"].Value.ToString() + "";
                }
                else
                {
                    dgvSubLista.DataSource = null;
                }
            }
            lstFiltroOrdenCompra.Visible = false;
        }

        private void dgvSubLista_SelectionChanged(object sender, EventArgs e)
        {
            decimal vl_SumatoriaCantidad = 0;
            decimal vl_SumatoriaImporte = 0;


            if (dgvSubLista.Rows.Count > 0)
            {
                for (int i = 0; i < dgvSubLista.Rows.Count; i++)
                {

                    if (dgvSubLista.Rows[i].IsSelected == true)
                    {
                        vl_SumatoriaCantidad = vl_SumatoriaCantidad +
                                               Convert.ToDecimal(
                                                   dgvSubLista.Rows[i].Cells["CantidadGrupoContada"].Value);
                        vl_SumatoriaImporte = vl_SumatoriaImporte +
                                              Convert.ToDecimal(dgvSubLista.Rows[i].Cells["DIngImporteGrupal"].Value);
                    }
                }

                txtSumatoriaCantidad.Text = vl_SumatoriaCantidad.ToString();
                txtSumatoriaImporte.Text = vl_SumatoriaImporte.ToString();
            }

        }

    }
}
